{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\u001b[32m\u001b[1m  Activating\u001b[22m\u001b[39m project at `~/git/mine/MathematicalEngineeringDeepLearning/Julia/makie_env`\n"
     ]
    }
   ],
   "source": [
    "using Pkg\n",
    "Pkg.activate(\".\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "using Lighthouse, CairoMakie, LaTeXStrings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "ename": "LoadError",
     "evalue": "UndefVarError: FigurePosition not defined",
     "output_type": "error",
     "traceback": [
      "UndefVarError: FigurePosition not defined",
      "",
      "Stacktrace:",
      " [1] top-level scope",
      "   @ In[35]:1",
      " [2] eval",
      "   @ ./boot.jl:368 [inlined]",
      " [3] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)",
      "   @ Base ./loading.jl:1428"
     ]
    }
   ],
   "source": [
    "function adapted_conf_mat!(subfig::FigurePosition, confusion::NumberMatrix,\n",
    "                                class_labels::AbstractVector{String},\n",
    "                                normalize_by::Union{Symbol,Nothing}=nothing;\n",
    "                                annotation_text_size=20, colormap=:Blues)\n",
    "    nclasses = length(class_labels)\n",
    "    if size(confusion) != (nclasses, nclasses)\n",
    "        throw(ArgumentError(\"Labels must match size of square confusion matrix. Found $(nclasses) labels for an $(size(confusion)) matrix\"))\n",
    "    end\n",
    "    title = \"Confusion Matrix\"\n",
    "    if !isnothing(normalize_by)\n",
    "        normdim = get((Row=2, Column=1), normalize_by) do\n",
    "            throw(ArgumentError(\"normalize_by must be :Row, :Column, or `nothing`; found: $(normalize_by)\"))\n",
    "        end\n",
    "        confusion = round.(confusion ./ sum(confusion; dims=normdim); digits=3)\n",
    "        title = \"$(string(normalize_by))-Normalized Confusion\"\n",
    "    end\n",
    "    class_indices = 1:nclasses\n",
    "    text_theme = get_theme(subfig, :ConfusionMatrix, :Text; textsize=annotation_text_size)\n",
    "    heatmap_theme = get_theme(subfig, :ConfusionMatrix, :Heatmap; nan_color=(:black, 0.0))\n",
    "    axis_theme = get_theme(subfig, :ConfusionMatrix, :Axis; xticklabelrotation=pi / 4,\n",
    "                           titlealign=:left, title,\n",
    "                           xlabel=\"Elected Class\", ylabel=\"Predicted Class\",\n",
    "                           xticks=(class_indices, class_labels),\n",
    "                           yticks=(class_indices, class_labels),\n",
    "                           aspect=AxisAspect(1))\n",
    "\n",
    "    ax = Axis(subfig; axis_theme...)\n",
    "\n",
    "    hidedecorations!(ax; label=false, ticklabels=false, grid=false)\n",
    "    ylims!(ax, nclasses + 0.5, 0.5)\n",
    "    tightlimits!(ax)\n",
    "    plot_bg_color = to_color(ax.backgroundcolor[])\n",
    "    crange = isnothing(normalize_by) ? (0.0, maximum(filter(!isnan, confusion))) :\n",
    "             (0.0, 1.0)\n",
    "    nan_color = to_color(heatmap_theme.nan_color[])\n",
    "    cmap = to_colormap(to_value(pop!(heatmap_theme, :colormap, colormap)))\n",
    "    heatmap!(ax, confusion'; colorrange=crange, colormap=cmap, nan_color=nan_color,\n",
    "             heatmap_theme...)\n",
    "    text_color = to_color(to_value(pop!(text_theme, :color, :black)))\n",
    "    function label_color(i, j)\n",
    "        c = confusion[i, j]\n",
    "        bg_color = if isnan(c) || ismissing(c)\n",
    "            Makie.Colors.alpha(nan_color) <= 0.0 ? plot_bg_color : nan_color\n",
    "        else\n",
    "            Makie.interpolated_getindex(cmap, c, crange)\n",
    "        end\n",
    "        return high_contrast(bg_color, text_color)\n",
    "    end\n",
    "    annos = vec([(string(confusion[i, j]), Point2f(j, i))\n",
    "                 for i in class_indices, j in class_indices])\n",
    "    colors = vec([label_color(i, j) for i in class_indices, j in class_indices])\n",
    "    text!(ax, annos; align=(:center, :center), color=colors, textsize=annotation_text_size,\n",
    "          text_theme...)\n",
    "    return ax\n",
    "end\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAIAAAAVFBUnAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd0BT9/4+8DchCghFJWxQEBdIwVHrwjpabG1dqNfR0ipqVdRWQVGroqDWasVWr7UXtS5cRcEFaB2ogBbELSoIglgZAmE4EFlJfn+ce/PjG5TlSQ4ffV5/JZ9zcs6T00ifnBUthUJBAAAAAMAfkdABAAAAAN42KFgAAAAAPEPBAgAAAOAZChYAAAAAz1CwAAAAAHiGggUAAADAMxQsAAAAAJ6hYAEAAADwDAULAAAAgGcoWAAAAAA8Q8ECAAAA4BkKFgAAAADPULAAAAAAeIaCBQAAAMAzFCwAAAAAnqFgAQAAAPAMBQsAAACAZyhYAAAAADxDwQIAAADgmVjoAACaEBcX9+eff966devly5cdO3acPHnywIED33yxCoXijz/+iIuLMzAw+O233xq8HEdHx9zc3D/++GPkyJFvnkrJw8OjtLSUiLp27bpw4UJuMCEh4aeffuIef/vtt66urm+yCjUlBwBgngLgbefn56etra3yyff09HzzJe/bt49bmkQieZPlmJmZEdGff/755pGq0tfX5+JZWloqB9euXavcCIGBgTUvYdGiRT179ly/fv3rZlBTcgAA1uEQIbzl/vrrr+XLl8tksoEDBx44cODcuXPTp08nos2bN+/fv/8NF37jxg0i6tu37z///PMmy9m2bVtISEjfvn3fMM/rZGdnP3z4kHscFxdX9xempKTEx8crX1udupMDADAKhwjhLffDDz8QUc+ePU+fPi0Wi4lo4MCBWVlZERERBw4c+Oqrr7jZkpKS/vjjj8TERENDww8++OD7779v1qwZEX399ddE5Ovre+rUqcjISF1dXQ8PjyFDhhDR/v374+Pjiejp06eBgYGenp6enp5EFBAQYGFhQUQ7d+48e/Zs7969Z82aRUQVFRU7d+48c+ZMQUGBjY2Nu7u78vBceHj4ixcv2rRpY21t3eA8r2Nra/vw4cPY2FhbW1siunTpUqtWrbKzs2UyGTdDSUnJ1q1bL1y4UFhYaGFhMWrUqH/961/cG0xJSSGi69ev7969e8KECdzaly1bduXKlRMnTuzbt69q8mPHjoWEhBDRzz//bGVldeHChS1bthDRwoULnZycePrvCQDACKF3oQGo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"
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "classes = [\"nous\", \"aimons\", \"l'\", \"apprentissage\",\"en\", \"profondeur\",\"<stop>\"]\n",
    "ground_truth =     [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]\n",
    "predicted_labels = [1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 3]\n",
    "confusion = Lighthouse.confusion_matrix(length(classes), zip(predicted_labels, ground_truth))\n",
    "\n",
    "fig, ax, p = plot_confusion_matrix(confusion, classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 1.8.3",
   "language": "julia",
   "name": "julia-1.8"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
